/* 
 * File:   Utils.h
 * Author: alrojas
 *
 * Created on 16 de junio de 2014, 10:25
 */

#ifndef UTILS_H
#define	UTILS_H

#include "opencv/cv.h"

using namespace cv;

namespace Utils{
    
    /** Calcula la distancia entre dos puntos.
     *  @param pt1 Punto 1.
     *  @param pt2 Punto 2. 
     *  @return Valor flotante que indica la distancia entre pt1 y pt2. 
     */
    inline float EuclideanDistance(Point pt1, Point pt2){
        return sqrt(pow(pt2.x - pt1.x,2) + pow(pt2.y - pt1.y,2));
    }
    
    /** Comprueba si un punto esta dentro del un polígono.
     *  @param point Punto a evaluar.
     *  @param contour Poligono. 
     *  @return Verdadero si point esta dentro de contour, y Falso si no lo esta. 
     */
    inline bool PointInContour(vector < Point > & contour, Point point){
        int polySides = (int)contour.size();  

        int i, j = polySides - 1;
        bool oddNodes = false;

        for (i = 0; i < polySides; i++){
            if (((contour[i].y < point.y && contour[j].y >= point.y)
                || (contour[j].y < point.y && contour[i].y >= point.y))
                && (contour[i].x <= point.x || contour[j].x <= point.x)){
                oddNodes ^= (contour[i].x + ( point.y - contour[i].y ) / ( contour[j].y - contour[i].y ) * ( contour[j].x - contour[i].x ) < point.x); 
            }
            j = i; 
        }

        return oddNodes; 
    }
    
}


#endif	/* UTILS_H */

